/**
 * 一共有4N个披萨，每天选择4个，记作 w <= x <= y <= z
 * 则奇数天吃z，偶数天吃y，不吃的三个扔掉
 * 问N天最多吃多少。
 * 显然奇数天要选出最大的、剩下三个选最小的，
 * 但是偶数天不能选最大和次大，这样当时最大的就会被抛弃，但实际上这个最大是有机会吃掉的
 * 首先排个序，选出最大的(N + N/2)个，于是一定在这里面选，可以达到最大。
 * 然后再换个思路，这里面尽可能抛弃掉最小的，剩下的吃掉自然就是最大。
 * 因此奇数天直接吃最大的，偶数天扔掉当时次小的，吃最小的即可。
 * 这样可以保证扔掉的N/2个一定是最少的
 */


using llt = long long;
class Solution {
public:
    long long maxWeight(vector<int>& pizzas) {
        int n = pizzas.size();
        sort(pizzas.begin(), pizzas.end());
        int need = n / 4;
        int tmp = need / 2;
        int start = pizzas.size() - need - tmp;
        int end = pizzas.size() - 1;
        llt ans = 0;
        for(int i=1;i<=need;++i){
            if(i & 1){
                ans += pizzas[end--];
            }else{
                ans += pizzas[start];
                start += 2;
            }
        } 
        return ans;
    }
};